#ifndef _MVDATA_FRAME_H_
#define _MVDATA_FRAME_H_

#include "MVDataMB.h"
#include <list>

///@brief 封装Frame结构，仅在库内部使用
class CMVDataFrame
{
//============================== 一般方法 ====================================
public:
	// 构造和析构函数
	CMVDataFrame( const CMVDataFrame & frame );
	CMVDataFrame( int frame_number, TYPE_FRAME frame_type );
	~CMVDataFrame();

public:
	///@brief 比较两个Frame是否有相同的Frame Number
	bool operator == ( const CMVDataFrame& framedata ) const;
	
	///@brief 比较两个Frame是否有不同的Frame Number
	bool operator != ( const CMVDataFrame& framedata ) const;

	///@brief 复制内部所有的属性及成员，但不包括 Dataname
	CMVDataFrame& operator = ( const CMVDataFrame& framedata );

//============================== 属性方法 ====================================
public:
	///@brief 设置帧号
	int SetFrameNumber( int frame_number );

	///@brief 取得帧号
	int GetFrameNumber() const;

	///@brief 设置帧类型
	int SetFrameType( TYPE_FRAME frame_type );

	///@brief 取得帧类型
	TYPE_FRAME GetFrameType() const;
	
	///@brief 迭代访问所有的Macro Block
	///@param curr_mb 当curr_mb==NULL时返回第一个Macro Block，当curr_mb!=NULL时，返回curr_mb后面一个MB的指针
	const CMVDataMB * GetNextMB( const CMVDataMB * curr_mb ) const;

	///@brief 取得指定位置的MB
	const CMVDataMB * GetMBByCoodinate( int x, int y ) const;

	///@brief 添加一个新的Macro Block，无排序
	int AddMB( const CMVDataMB * mbdata );

	///@brief 删除指定位置的一个MB
	int RemoveMB( int x, int y );
	 
	///@brief 取得内部的MB的数量
	int GetMBCount() const;

	///@brief 清除帧内的所有数据
	int Clear();

//============================== 类成员 ====================================
private:
	int m_iFrameNumber;
	TYPE_FRAME m_eFrameType;
	std::list<CMVDataMB*> * m_plstMB;
	
};

#endif // _MVDATA_FRAME_H_